//
//  TYZImageTitleButton.m
//  DriveSchoolCoach
//
//  Created by TangBin on 2019/8/13.
//  Copyright © 2019 TangBin. All rights reserved.
//

#import "TYZImageTitleButton.h"

@implementation TYZImageTitleButton

+ (TYZImageTitleButton *)createWithImageButton:(UIView *)superView frame:(CGRect)frame font:(UIFont *)font action:(SEL)action propertiesBlock:(void(^)(TYZImageTitleButton *button))block
{
    return [self createWithImageButton:superView frame:frame font:font target:nil action:action propertiesBlock:block];
}

+ (TYZImageTitleButton *)createWithImageButton:(UIView *)superView frame:(CGRect)frame font:(UIFont *)font target:(id)target action:(SEL)action propertiesBlock:(void (^)(TYZImageTitleButton * _Nonnull))block
{
    TYZImageTitleButton *btn = [TYZImageTitleButton buttonWithType:UIButtonTypeCustom];
    btn.frame = frame;
    if (target)
    {
        [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    }
    btn.titleLabel.font = font;
    if (superView)
    {
        [superView addSubview:btn];
    }
    
    if (block)
    {
        block(btn);
    }
    return btn;
}

/**
 *  设置button的titleLabel和imageView的布局样式，及间距
 *
 *  @param style titleLabel和imageView的布局样式
 *  @param space titleLabel和imageView的间距
 */
- (void)layoutButtonWithEdgeInsetsStyle:(TYZButtonEdgeInsetsStyle)style imageTitleSpace:(CGFloat)space
{
    /**
     *  知识点：titleEdgeInsets是title相对于其上下左右的inset，跟tableView的contentInset是类似的，
     *  如果只有title，那它上下左右都是相对于button的，image也是一样；
     *  如果同时有image和label，那这时候image的上左下是相对于button，右边是相对于label的；title的上右下是相对于button，左边是相对于image的。
     */
    
    // 1. 得到imageView和titleLabel的宽、高
    CGFloat imageWith = self.imageView.image.size.width;
    CGFloat imageHeight = self.imageView.image.size.height;
    
    CGFloat labelWidth = 0.0;
    CGFloat labelHeight = 0.0;
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0)
    {
        // 由于iOS8中titleLabel的size为0，用下面的这种设置
        labelWidth = self.titleLabel.intrinsicContentSize.width;
        labelHeight = self.titleLabel.intrinsicContentSize.height;
    }
    else
    {
        labelWidth = self.titleLabel.frame.size.width;
        labelHeight = self.titleLabel.frame.size.height;
    }
    
    // 2. 声明全局的imageEdgeInsets和labelEdgeInsets
    UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
    UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
    
    // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值
    
    switch (style)
    {
        case TYZButtonEdgeInsetsStyleTop:
        {
            imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space*0.5, 0, 0, -labelWidth);
            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space*0.5, 0);
        } break;
        case TYZButtonEdgeInsetsStyleLeft:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, -space*0.5, 0, space*0.5);
            labelEdgeInsets = UIEdgeInsetsMake(0, space*0.5, 0, -space*0.5);
        } break;
        case TYZButtonEdgeInsetsStyleBottom:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space*0.5, -labelWidth);
            labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space*0.5, -imageWith, 0, 0);
        } break;
        case TYZButtonEdgeInsetsStyleRight:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space*0.5, 0, -labelWidth-space*0.5);
            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space*0.5, 0, imageWith+space*0.5);
        } break;
        default:
            break;
    }
    
    // 4. 赋值
    self.titleEdgeInsets = labelEdgeInsets;
    self.imageEdgeInsets = imageEdgeInsets;
}

@end
